package com.ruoyi.system.mysql.service.impl;

import java.util.Collections;
import java.util.List;

import com.alibaba.fastjson2.JSON;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.system.api.RemoteMysqlService;
import com.ruoyi.system.mysql.service.RemoteMysqlTCCService;
import com.ruoyi.system.mysql.service.TCCService;
import io.seata.spring.annotation.GlobalTransactional;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.api.domain.SysOperLog;
import com.ruoyi.system.mysql.mapper.SysOperLogMapper;
import com.ruoyi.system.mysql.service.ISysOperLogService;

/**
 * 操作日志 服务层处理
 * 
 * @author ruoyi
 */
@Slf4j
@Service
public class SysOperLogServiceImpl implements ISysOperLogService
{
    @Autowired
    private SysOperLogMapper operLogMapper;

    @Autowired
    private RemoteMysqlService remoteMysqlService;

    /**
     * 新增操作日志
     * 
     * @param operLog 操作日志对象
     * @return 结果
     */
    @Override
    public int insertOperlog(SysOperLog operLog)
    {
        return operLogMapper.insertOperlog(operLog);
    }

    /**
     * 查询系统操作日志集合
     * 
     * @param operLog 操作日志对象
     * @return 操作日志集合
     */
    @Override
    public List<SysOperLog> selectOperLogList(SysOperLog operLog)
    {
        return operLogMapper.selectOperLogList(operLog);
    }



    @Override
    @GlobalTransactional
    public List<SysOperLog> selectOperLogListGlobalTranscation(SysOperLog operLog) {
        operLogMapper.insertOperlog(operLog);
        // 分布式事务
        remoteMysqlService.getUserInfo(operLog);

        return operLogMapper.selectOperLogList(operLog);
    }

    @Autowired
    private TCCService tccService;

    @Autowired
    private RemoteMysqlTCCService remoteMysqlTCCService;


    @Override
    @GlobalTransactional
    public TableDataInfo selectOperLogListGlobalTranscationTCC(SysOperLog operLog) {
        if(!tccService.prepare(operLog)){
            throw new RuntimeException("tcc error");
        };
//        operLogMapper.insertOperlog(operLog);
//        // 分布式事务
//        remoteMysqlService.getUserInfo(operLog);
        TableDataInfo tableDataInfo  = remoteMysqlTCCService.getUserInfotcc(operLog);
        if(tableDataInfo.getCode() != 200){
            throw new RuntimeException("tcc error "+ JSON.toJSONString(tableDataInfo));
        }
        log.info("tableDataInfo:{}", JSON.toJSONString(tableDataInfo));
        return tableDataInfo;
    }

    /**
     * 批量删除系统操作日志
     * 
     * @param operIds 需要删除的操作日志ID
     * @return 结果
     */
    @Override
    public int deleteOperLogByIds(Long[] operIds)
    {
        return operLogMapper.deleteOperLogByIds(operIds);
    }



    /**
     * 查询操作日志详细
     * 
     * @param operId 操作ID
     * @return 操作日志对象
     */
    @Override
    public SysOperLog selectOperLogById(Long operId)
    {
        return operLogMapper.selectOperLogById(operId);
    }

    /**
     * 清空操作日志
     */
    @Override
    public void cleanOperLog()
    {
        operLogMapper.cleanOperLog();
    }
}
